package com.chengxiaoxiao.ai_demo.service.impl;

import cn.hutool.core.collection.CollUtil;
import com.chengxiaoxiao.ai_demo.service.IndexInfoService;
import com.chengxiaoxiao.ai_demo.vo.vo.IndexTreeVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 指标体系实现类
 *
 * @Description:
 * @Author Cheng Xiaoxiao
 * @Date: 2025/3/11 11:56
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class IndexInfoServiceImpl implements IndexInfoService {
    /**
     * 根据指标体系获取指标信息
     *
     * @param indexId 指标ID
     * @return 指标体系树
     */
    private List<IndexTreeVo> getIndexInfo(String indexId, List<IndexTreeVo> treeVos) {
        List<IndexTreeVo> indexTreeVos = new ArrayList<>();

        //递归根据id匹配指标信息
        for (IndexTreeVo indexTreeVo : treeVos) {
            if (indexTreeVo.getId().equals(indexId)) {
                return CollUtil.newArrayList(indexTreeVo);
            }
            if (CollUtil.isNotEmpty(indexTreeVo.getChildren())) {
                List<IndexTreeVo> tempIndexTrees = getIndexInfo(indexId, indexTreeVo.getChildren());
                if (CollUtil.isNotEmpty(tempIndexTrees)) {
                    return tempIndexTrees;
                }
            }
        }

        return indexTreeVos;
    }

    /**
     * 模拟生成指标体系
     *
     * @return 指标信息
     */
    @Override
    public List<IndexTreeVo> mockIndexInfo() {
        IndexTreeVo root = new IndexTreeVo();
        root.setId("1");
        root.setName("技术先进性");
        root.setDescription("评估军事装备与技术在其当前使用环境中的创新性和成熟度");

        List<IndexTreeVo> children = CollUtil.newArrayList();

        // 技术成熟度
        IndexTreeVo maturity = createIndexTreeVo("11", "技术成熟度", "评估技术当前的成熟度水平及稳定性");
        maturity.setChildren(CollUtil.newArrayList(
                createIndexTreeVo("111", "技术生命周期", "评估技术所处的发展阶段"),
                createIndexTreeVo("112", "可靠性水平", "衡量技术在使用过程中能够稳定运行的概率")
        ));
        children.add(maturity);

        // 技术创新性
        IndexTreeVo innovation = createIndexTreeVo("12", "技术创新性", "评估技术在同类装备中的创新程度");
        innovation.setChildren(CollUtil.newArrayList(
                createIndexTreeVo("121", "独创性", "评估技术在市场或同类型装备中的独特性和创新点"),
                createIndexTreeVo("122", "竞争优势", "衡量技术在军事对抗中带来的战略优势")
        ));
        children.add(innovation);

        // 作战环境适应性
        IndexTreeVo environmentAdaptability = createIndexTreeVo("13", "作战环境适应性", "评估技术对当前和未来作战环境的适应能力");
        environmentAdaptability.setChildren(CollUtil.newArrayList(
                createIndexTreeVo("131", "环境兼容性", "评估技术对各种作战环境适应能力，包括但不限于地形、气候等因素"),
                createIndexTreeVo("132", "对抗适应性", "评估技术在面对敌方对抗措施时的有效应对能力")
        ));
        children.add(environmentAdaptability);

        root.setChildren(children);
        return CollUtil.newArrayList(root);
    }

    /**
     * 辅助方法，递归创建 IndexTreeVo 对象，并分配唯一ID
     *
     * @param id          唯一ID
     * @param name        名称
     * @param description 描述
     * @return IndexTreeVo 对象
     */
    private IndexTreeVo createIndexTreeVo(String id, String name, String description) {
        IndexTreeVo vo = new IndexTreeVo();
        vo.setId(id);
        vo.setName(name);
        vo.setDescription(description);
        return vo;
    }

    /**
     * 根据指标ID获取子指标树
     *
     * @param indexId 指标ID
     * @return 指标树
     */
    @Override
    public List<IndexTreeVo> getIndexInfo(String indexId) {
        return getIndexInfo(indexId, mockIndexInfo());
    }
}